package gang.org.springframework.boot.autoconfigure;

import gang.org.springframework.framework.annotation.GComponentScan;
import gang.org.springframework.framework.annotation.GangFilterType;
import gang.org.springframework.framework.context.GangTypeExcludeFilter;
import gang.org.springframework.framework.core.annotation.GangAliasFor;
import gang.org.springframework.framework.support.GangBeanNameGenerator;

import java.lang.annotation.*;

/**
 * @author ChenGang
 * @Date 2022/09/16
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@GEnableAutoConfiguration
@GComponentScan(excludeFilters = {@GComponentScan.GangFilter(type = GangFilterType.Custom, classes = GangTypeExcludeFilter.class), @GComponentScan.GangFilter(type = GangFilterType.Custom, classes = GangAutoConfigurationExcludeFilter.class)})
public @interface GSpringBootApplication {

    @GangAliasFor(annotation = GComponentScan.class, attribute = "basePackages")
    String[] scanBasePackages() default {};

    Class<? extends GangBeanNameGenerator> nameGenerator() default GangBeanNameGenerator.class;

}
